# 集合类型
# 集合是使用{}来定义、和字典符号一致，但是不存在keu-value键值对结构   无序的 类似 java中的set集合 一个值不能重复出现多次
# s使用{}来创建
import random

set1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
# 或
set2 = set([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(set1, '\n', set2)

# 集合之中只能存储不可变数据类型  TypeError: unhashable type: 'list'
# s = {[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]} 错误写法
# s = set([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) 正确写法
# print(s)

# 创建一个空集合 的bool值是False
set01 = set()
# 直接创建
set02 = {}
# 直接创建是字典类型
print('set01', type(set01), 'set02', type(set02))

setStr = {'Hello Madidi'}
# 创建的时候是乱的
setStro = set('Hello Madidi')
print(setStr, type(setStr))
print(setStro, type(setStro))

#
s2 = set([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(s2)

s3 = set(range(1, 11))
# 简单的set方法生成式
s4 = set(random.randint(1, 20) for index, item in enumerate(range(1, 11), start=8))
print(s3)
print(s4)

# 集合也属于序列的一种
print('max', max(s4))
print('min', min(s4))
print('len', len(s4))

# 判断在集合中是否存在
print(10 in s4)
print(10 not in s4)

# 删除集合
print(s4)
del s4
# 删除就不能是用了NameError: name 's4' is not defined. Did you mean: 's2'?
# 这里会err
# print(s4)

print('-' * 10, '集合操作符', '-' * 10)
# 集合：交集、差集、并集、补集
so = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
st = {5, 6, 7, 8, 9, 10, 11, 12, 13, 14}
# 交集
print(so & st)
# 并集
print(so | st)
# 差集
print(so - st)
# 补集
print(so ^ st)

print('-' * 10, '集合的操作方法', '-' * 10)
listMap = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
# 集合中添加元素
listMap.add(20)
print(listMap)
# 集合中删除元素
listMap.remove(9)
print(listMap)
# 清空集合所有元素
listMap.clear()
print(listMap)
listMap.add(28)
listMap.add(12)
listMap.add(22)
listMap.add(22)
print(listMap)

print('-' * 10, '集合的便利', '-' * 10)
# 普通便利方式
for i in listMap:
    print(i)

# 使用enumerate便利
for index, item in enumerate(listMap):
    print(index, item)

# 集合生成式
listMapOne = {item for item in range(1, 19)}
print(listMapOne)
listMapTwo = {index * item for index, item in enumerate(range(1, 19), start=12)}
print(listMapTwo)
listTree = {i for i in range(1, 19) if (i % 2 == 0)}
print(listTree)
